#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
#include "esp_log.h"
#include "nvs_flash.h"

// 程序功能：2023.3.26——ESP-IDF读取nvs中的数据并且自加1存储
//      1.先初始化nvs，打开nvs
//      2.nvs_get_u32中取出来的数据要使用&来进行操作
//      3.在进行nvs_close和nvs_flash_deinit后再次进行更改nvs时是无效的

void app_main(void)
{
    //-先初始化nvs
    ESP_ERROR_CHECK(nvs_flash_init());

    //-创建一个nvs句柄并打开它
    const char *wifi = "704";
    nvs_handle_t wifi_handle;
    nvs_open(wifi, NVS_READWRITE, &wifi_handle);//创建一个nvs的区域名字，可读写，成功后会传给后面这个句柄

    const char *wifi_key = "wifi_connect";
    uint32_t wifi_connect_times = 10;
    while (1)
    {
        //-将key中的值取出来放到&这个变量里
        nvs_get_u32(wifi_handle, wifi_key, &wifi_connect_times);//前面是key，后面是value
        ESP_LOGW("NVS", "WIFI连接次数:%d", wifi_connect_times);
        //-设置这个变量
        nvs_set_u32(wifi_handle, wifi_key, ++wifi_connect_times);

        //-在进行nvs操作时，必须确保数值被提交
        nvs_commit(wifi_handle);

        vTaskDelay(500 / portTICK_PERIOD_MS);
    }
    //每次操作完成后，不想进行第二次操作时才调用这个，否则调用后需要重新初始化，否则写入是失败的
    //-关闭句柄
    nvs_close(wifi_handle);
    //-nvs反初始化
    nvs_flash_deinit();
}
